package com.edfapp.costom;

import com.edfapp.utils.FieldExtremesUtils;
import com.edfapp.utils.ListProcessor;

import java.util.List;
import java.util.Map;

/**
 * @author hong
 * @description 描述
 * @time 2025/9/25 15:15
 **/
public class TXTMain {
    public static void main(String[] args) {
        // 1. 配置文件路径（需替换为你的实际文件路径）
        String filePath = "C:\\Users\\xinho\\Desktop\\a.txt";  // Windows路径示例
        // String filePath = "/home/user/data/a.txt";  // Linux/Mac路径示例

        // 2. 创建解析器并执行解析
        TXTBrainWaveParser parser = new TXTBrainWaveParser();
        try {
            List<TXTBrainWave> brainWaveList = parser.parseFile(filePath);

            // 3. 处理解析后的数据（示例：打印数据总量和前10条详情）
            System.out.println("文件解析完成！共获取 " + brainWaveList.size() + " 条脑波数据");
            System.out.println("前100条数据详情：");
            for (int i = 0; i < Math.min(100, brainWaveList.size()); i++) {
                TXTBrainWave data = brainWaveList.get(i);
                System.out.printf(
                        "时间：%s | 注意力：%f | 冥想：%f | Delta：%f | 硬件版本：%s%n",
                        data.getCollectTime(),
                        data.getAtt(),
                        data.getMed(),
                        data.getDelta(),
                        data.getHardwareVersion()
                );
            }

            // 后续可扩展数据处理逻辑：如计算平均值、筛选异常数据、写入数据库等
            // 示例：计算注意力平均值
            double avgAtt = brainWaveList.stream()
                    .mapToDouble(TXTBrainWave::getAtt)
                    .average()
                    .orElse(0.0);
            System.out.printf("所有数据的注意力平均值：%.2f%n", avgAtt);
            //计算最大最小值
            ListProcessor.ensureEvenSize(brainWaveList);
            System.out.println("裁剪完成！共剩余 " + brainWaveList.size() + " 条脑波数据");
            // 获取所有数值字段的最大最小值
            Map<String, FieldExtremesUtils.FieldExtremes> extremes =
                    FieldExtremesUtils.getFieldExtremes(brainWaveList, TXTBrainWave.class);

            // 输出结果
            for (Map.Entry<String, FieldExtremesUtils.FieldExtremes> entry : extremes.entrySet()) {
                System.out.println(entry.getKey() + ": " + entry.getValue());
            }

        } catch (java.io.FileNotFoundException e) {
            System.err.println("错误：文件不存在！路径：" + filePath);
        } catch (java.io.IOException e) {
            System.err.println("文件读取失败：" + e.getMessage());
        } catch (TXTBrainWaveParser.ParseException e) {
            System.err.println("数据解析失败：" + e.getMessage());
        }
    }
}
